Kinetic Battery
Ever since I saw Youtube videos of the Soldier from Team Fortress 2 launching himself through the air with a rocket to his feet I’ve been obsessed. I downloaded and learned how to do it myself, and when Team Fortress 2 wasn’t enough I sought it out in the other games I loved: Nade and EPG boosting in Titanfall 2, the core eject shotgun, Malicious Railcannon, and Rocket Launcher from Ultrakill, or the PGL's RJ250 Compound Overclock from Deep Rock Galactic.
Description
Kinetic Battery is a first-person movement shooter born from that obsession and a desire to learn the Godot game engine. You blast yourself through a giant brutalist hall, destroying turrets as you go. There’s still a lot I’d like to add to the game but, even in its current state, I'm pretty proud of it.
How did we get here?
At the start of this project I had very little knowledge or experience with GDScript or the Godot engine. I started with simple ideas, sketching them out and using the little knowledge I had of game engines to research where I would even start with the implementation.
I learned to search through and understand the documentation behind coding languages as I slowly built up a very rough prototype. It would take video tutorials, old forum posts, and even a few forum posts of my own before I had something even close to a playable video game.
Object on the left is the level I initially tested movement on. The object on the right is the new level I created to test the movement and mechanics in depth. Implementing air strafing led me to learn a lot about the Godot physics engine and the Source engine along with the surprising amount of linear algebra that comes with it.
Creating enemies gave me the opportunity to learn about finite state machines and review OOP fundamentals. Designing the class hierarchy for the state machine and projectiles is actually when object oriented programming really clicked for me.
With a working prototype, I moved to making the game look as nice as it felt to play. I brushed up on my knowledge of Blender and after a lot of research and sketching I began work creating 3D models for the game. Besides refining my proficiency with 3D modeling, the biggest skill I learned from this experience was an understanding of materials in blender. I learned how to use nodes and noise to create procedurally generated concrete texture. I learned how to UV unwrap and how to paint those textures.
Sketches of what would become the final level. Final model of the level imported into Godot. Overall, I’m very happy with how much I was able to learn and accomplish with this project. The things I learned from this experience are the foundations on which all my subsequent work will be built.